//////////////////////////////////////////////////////////////////////////

#ifndef _PATIENT_H_
#include "patient.h"
#endif

//////////////////////////////////////////////////////////////////////////

Patient::Patient( size_t _history,
				  const QString& _surname,
				  const QString& _name,
				  const QString& _secondName,
				  const QString& _birthDate,
				  Human::Sex _sex,
				  const QString& _diagnosis,
				  const QString& _notes /* = */ )

: Human(_surname, _name, _secondName, _birthDate, _sex),
  m_HistoryNumber(_history),
  m_Diagnosis(_diagnosis),
  m_Notes(_notes),
  m_CurrentResearch(NULL)
{
}


//////////////////////////////////////////////////////////////////////////


Patient::Patient()
: Human("", "", "", "", Human::MALE)
{
}


//////////////////////////////////////////////////////////////////////////


size_t Patient::GetHistoryNumber() const
{
    return m_HistoryNumber;
}


//////////////////////////////////////////////////////////////////////////


const QString& Patient::GetDiagnosis() const
{
    return m_Diagnosis;
}


//////////////////////////////////////////////////////////////////////////


const QString& Patient::GetNotes() const
{
    return m_Notes;
}


//////////////////////////////////////////////////////////////////////////


const Research* Patient::GetCurrentResearch() const
{
    return m_CurrentResearch;
}


//////////////////////////////////////////////////////////////////////////


void Patient::SetCurrentResearch (const Research* _research)
{
    m_CurrentResearch = _research;
}


//////////////////////////////////////////////////////////////////////////


bool Patient::operator==( const Patient& _rhs ) const
{
    return m_HistoryNumber == _rhs.GetHistoryNumber()    &&
           m_Diagnosis == _rhs.GetDiagnosis()            &&
           m_Notes == _rhs.GetNotes()                    &&
           GetSurname() == _rhs.GetSurname()             &&
           GetName() == _rhs.GetName()                   &&
           GetSecondName() == _rhs.GetSecondName()       &&
           GetBirthDate() == _rhs.GetBirthDate()         &&
           GetSex() == _rhs.GetSex();
}


//////////////////////////////////////////////////////////////////////////


bool Patient::operator!=( const Patient& _rhs ) const
{
    return !operator==(_rhs);
}


//////////////////////////////////////////////////////////////////////////


void Patient::AddLoadedResearch (const Research& _research)
{
    m_Researches.push_back(_research);
}


//////////////////////////////////////////////////////////////////////////


void Patient::ClearResearches ()
{
    m_Researches.clear();
}


//////////////////////////////////////////////////////////////////////////


const Patient::Researches& Patient::GetPatientResearches() const
{
    return m_Researches;
}


//////////////////////////////////////////////////////////////////////////
